home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / ScrollBar.C < prev    next >
C/C++ Source or Header  |  1992-04-27  |  4KB  |  171 lines

  1. #ifdef __GNUG__
  2. #pragma implementation
  3. #endif
  4.  
  5. #include "ScrollBar.h"
  6.  
  7. #include "Class.h"
  8. #include "Slider.h"
  9. #include "Buttons.h"
  10. #include "Look.h"
  11.  
  12. //---- ScrollBarButton ---------------------------------------------------------
  13.  
  14. class ScrollBarButton: public Button {
  15.     int dir;
  16. public:
  17.     ScrollBarButton(int id, int d) : Button(id)
  18.     { dir= d; SetFlag(eVObjHFixed | eVObjVFixed); SetFlag(eButtonIdle); }
  19.     void DrawInner(Rectangle r, bool highlight);
  20.     Metric GetMinSize()
  21.     { return gLook->ScrollButtonLayout()->GetMinSize(this); }
  22. };
  23.  
  24. void ScrollBarButton::DrawInner(Rectangle r, bool highlight)
  25. {
  26.     int code= dir;
  27.     if (Enabled())
  28.     SETBIT(code, 3);
  29.     if (highlight)
  30.     SETBIT(code, 4);
  31.     gLook->ScrollButtonLayout()->Adorn(this, r, code);
  32.     Button::Draw(r);
  33. }
  34.  
  35. //---- ScrollBarThumb ----------------------------------------------------------
  36.  
  37. class ScrollBarThumb: public Thumb {
  38. public:
  39.     ScrollBarThumb(Slider *sl, Direction d) : Thumb(sl, d)
  40.     { }
  41.     void Draw(Rectangle)
  42.     { gLook->ThumbLayout()->Adorn(this, contentRect); }
  43.     Metric GetMinSize()
  44.     { return gLook->ThumbLayout()->GetMinSize(this); }
  45. };
  46.  
  47. //---- ScrollBarSlider ---------------------------------------------------------
  48.  
  49. class ScrollBarSlider: public Slider {
  50. public:
  51.     ScrollBarSlider(int id= cIdNone, Direction dir= eVert) : Slider(id, dir)
  52.     { }
  53.     Thumb *MakeThumb()
  54.     { return new ScrollBarThumb(this, dir); }
  55.     void Draw(Rectangle);
  56.     Metric GetMinSize()
  57.     { return thumb->GetMinSize(); }
  58. };
  59.  
  60. void ScrollBarSlider::Draw(Rectangle r)
  61. {
  62.     gLook->SliderLayout()->Adorn(this, contentRect);
  63.     CompositeVObject::Draw(r);
  64. }
  65.  
  66. //---- ScrollBar ---------------------------------------------------------------
  67.  
  68. NewMetaImpl(ScrollBar,Expander, (TP(slider), TE(dir)));
  69.  
  70. ScrollBar::ScrollBar(int id, Direction d) : Expander(id, d, gPoint0)
  71. {
  72.     slider= 0;
  73.     dir= d;
  74. }
  75.  
  76. VObject *ScrollBar::MakePart(int id)
  77. {
  78.     switch (id) {
  79.     case eScrollBarUpLeft:
  80.     return new ScrollBarButton(id, dir ? 0 : 2);
  81.     case eScrollBarSlider:
  82.     return new ScrollBarSlider(id, dir);
  83.     case eScrollBarDownRight:
  84.     return new ScrollBarButton(id, dir ? 1 : 3);
  85.     }
  86.     return 0;
  87. }
  88.  
  89. void ScrollBar::MakeParts()
  90. {
  91.     Add(MakePart(eScrollBarUpLeft));
  92.     Add(slider= (Slider*) MakePart(eScrollBarSlider));
  93.     Add(MakePart(eScrollBarDownRight));
  94. }
  95.  
  96. void ScrollBar::SetContainer(VObject *v)
  97. {
  98.     if (slider == 0)
  99.     MakeParts();
  100.     Expander::SetContainer(v);
  101. }
  102.  
  103. void ScrollBar::Draw(Rectangle)
  104. {
  105.     gLook->ScrollBarLayout()->Adorn(this, contentRect);
  106. }
  107.  
  108. void ScrollBar::ViewSizeChanged(Point vsz)
  109. {
  110.     slider->SetMax(vsz, TRUE);
  111. }
  112.  
  113. void ScrollBar::BubbleUpdate(Point relOrig)
  114. {
  115.     slider->SetVal(relOrig, TRUE);
  116. }
  117.  
  118. void ScrollBar::SetThumbRange(Point sz)
  119. {
  120.     slider->SetThumbRange(sz, TRUE);
  121. }
  122.  
  123. void ScrollBar::Init(Point e, Point sz, Point vsz)
  124. {
  125.     SetExtent(e);
  126.     slider->SetThumbRange(sz);
  127.     slider->SetMax(vsz, TRUE);
  128. }
  129.  
  130. void ScrollBar::Control(int id, int part, void *val)
  131. {
  132.     Point scroll;
  133.     
  134.     switch (id) {
  135.     case eScrollBarUpLeft:
  136.     part= cPartScrollStep;
  137.     scroll[dir]= -1;
  138.     break;
  139.     case eScrollBarDownRight:
  140.     part= cPartScrollStep;
  141.     scroll[dir]= 1;
  142.     break;
  143.     case eScrollBarSlider:
  144.     switch (part) {
  145.     case eSliderPageUpLeft:
  146.         part= cPartScrollPage;
  147.         scroll[dir]= -1;
  148.         break;
  149.     case eSliderPageDownRight:
  150.         part= cPartScrollPage;
  151.         scroll[dir]= 1;
  152.         break;
  153.     case eSliderThumb:
  154.         if (dir) {
  155.         part= cPartScrollVAbs;
  156.         scroll.y= ((Point*) val)->y;
  157.         } else {
  158.         part= cPartScrollHAbs;
  159.         scroll.x= ((Point*) val)->x;
  160.         }
  161.         break;
  162.     }
  163.     break;
  164.     default:
  165.     VObject::Control(id, part, val);
  166.     return;
  167.     }
  168.     VObject::Control(GetId(), part, &scroll);
  169. }
  170.  
  171.